package com.hhwy.framework.util;

import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.Map;

import com.hhwy.framework.common.Constants;

/**
 * 创建日期:2015年3月17日
 * Title:扫描并解压插件
 * Description：扫描指定目录中的插件(.zip文件)，并解压插件到指定的文件夹中
 * @author liuh
 * @mender：（文件的修改者，文件创建者之外的人）
 * @version 1.0
 * Remark：认为有必要的其他信息
 */
public class ScanToUnzip {
	/**
	 * 功能:默认扫描上传路径；
	 * isForce:是否强制解压(false：如果插件已解压，则不重新解压;true:如果插件已解压，则删除原解压目录后再解压)
	 * 作者: liuh
	 * 创建日期:2015年3月17日
	 * 修改者: mender
	 * 修改日期: modifydate
	 * @throws IOException 
	 */
	public static void scanAndUnzip(boolean isForce, ScanToUnZipLinsteners listener, Map<String, Boolean> pluginIsNew) throws IOException{
		scanAndUnzip(Constants.UPLOAD_FOLDER_PATH, isForce, listener, pluginIsNew);
	}
	
	/**
	 * 功能:扫描指定路径的压缩文件;
	 * isForce:是否强制解压(false：如果插件已解压，则不重新解压;true:如果插件已解压，则删除原解压目录后再解压)
	 * 作者: liuh
	 * 创建日期:2015年3月17日
	 * 修改者: mender
	 * 修改日期: modifydate
	 * @param folderPath
	 * @throws IOException 
	 */
	public static void scanAndUnzip(String zipsPath, boolean isForce, ScanToUnZipLinsteners listener, Map<String, Boolean> pluginIsNew) throws IOException{
		File zipPlugins = new File(zipsPath);
		FilenameFilter filter = new FilenameFilter(){
			public boolean accept(File dir, String fileName){
				return fileName.endsWith("-plugin.zip");
			}
		};
		String[] filesName = zipPlugins.list(filter);
		File dirFile = null;
		String smartName = null;
		if(filesName != null){
			for (int i = 0; i < filesName.length; i++) {
				smartName = filesName[i].substring(0, filesName[i].lastIndexOf("-plugin.zip"));
				dirFile = new File(Constants.UNCOMPRESSION_PATH + "/" + smartName);
				if(!isForce && dirFile.exists() && dirFile.isDirectory()){
					pluginIsNew.put(smartName, false);
					continue;
				}
				if(dirFile.exists()){
					if(!dirFile.isDirectory() || isForce){
						IoTools.deleteDir(dirFile);
					}
				}
				if(!dirFile.exists()){
					pluginIsNew.put(smartName, true);
					dirFile.mkdir();
				}
				//解压插件
				Unzip.Ectract(zipsPath + "/" + filesName[i], Constants.UNCOMPRESSION_PATH + "/" + smartName);
			}
			
			for (int i = 0; i < filesName.length; i++) {
				smartName = filesName[i].substring(0, filesName[i].lastIndexOf("-plugin.zip"));
				if (listener!=null) {
					listener.unzipFile(smartName, zipsPath);
				}
			}
		}
	}
	
	public static void main(String[] args) throws IOException{
		//scanAndUnzip(false);
	}
}
